function add(a,b,c) {
    return a+b+c
}
// 三个参数每次只能给一个
// 函数柯里化
/**
 * @param(function) fn
 * @param function
 */
function curry(fn) {
    // 函数嵌套函数，内部函数会被返回到外部，并得以执行
    // 闭包空间中
    let arr =[];
    // 慢慢收集拿到参数
    // 声明
    // fn 等在闭包空间里的永生变量在闭包函数声明时已经存在
    let judge = (...args) => {
        if (args.length == fn.length) return fn(...args)
        return (...arg) => judge(...args,...arg)
    }
    return judge;
    //return (args) => {
    //  伪代码  arr.push(args);
    //   if(arr.length==3){
    //       fn(...arr)
    //   }
    // 函数运行时可以访问到的声明是变量
    //}
}
console.log(add.length)
// 得到闭包的函数
let addCurry = curry(add) // 返回值 函数
console.log(addCurry(1)(2)(3) ) // 一次接受一个参数， ....,直到接受参数等于
